redis介绍4

您所在的位置:网站首页 redis 哨兵模式配置 redis介绍4

redis介绍4

2023-03-31 14:52| 来源: 网络整理| 查看: 265

一、redis的配置文件redis.conf 1.redis配置文件中关于网络的配置 (1)port:指定redis服务所使用的端口,默认使用6379. (2)bind:配置客户端连接redis服务时,所能使用的ip地址,默认可以使用redis服务所在主机上任何一个ip;一般情况下,都会配置一个ip,而且通常是一个事实。 如果配置了port和bind,则客户端连接redis服务时,必须指定端口号和ip: redis-cli -h 192.168.11.128 -p 6380 redis-cli -h 192.168.11.128 -p 6380 shutdown (3)tcp-keepalive:连接保活策略。

2.redis中的数据库 redis中默认有16个数据库(database),编号为0~15,redis也是一个应用对应一个数据库,与mysql数据库不同的是,redis的数据库由它自身创建,程序员不能手动创建。 如果想要改变redis中数据库的数量可以通过修改redis的配置文件redis.conf的databases的值来改变。

3.安全配置 客户端连接mysql数据库需要用户名和密码,而客户端连接redis数据库不需要用户名和密码,只要知道ip和端口就可以连,所以redis的安全性不如mysql。 redis也可以在服务端设置密码(默认不适用),通过配置文件来设置密码,修改requirepass值。此项需要在protected-mode=yes时起作用,使用密码登录客户端: redis-cli -h ip -p port -a pwd 一旦设置了密码验证,客户端连接redis服务时,必须使用密码连接。

二、redis的持久化 redis是一种内存数据库,大多数时候它把数据存储在内存中(redis主要作缓存)。除此之外,redis支持持久化(包括RDB和AOF),可以将内存中的数据保存在磁盘中,重启时候可以再次加载进行使用。注意:采用持久化会影响redis的高效性。 1.RDB(Redis Database)策略 在指定的时间间隔内,执行指定次数的写操作(在适当的时机采用适当手段把内存中的数据持久化到磁盘中),会自动触发一次持久化操作。在指定目录下生成一个dump.rdb文件,redis重启时通过加载dump.rdb文件来恢复数据。默认的策略是: 1分钟内改变了1万次;或者5分钟内改变了10次;或者 如果修改RDB策略需修改配置文件中的save的值: 在这里插入图片描述 save < seconds > < changes >:即redis在seconds秒内key改变changes次,redis把快照内的数据保存到磁盘中一次。 禁用RDB策略则直接将配置文件中所有的save都注释掉。 配置文件中的其他值: dbfilename:redis持久化数据生成的文件名,默认是dump.rdb,也可以通过该值来修改。 dir:持久化数据生成文件保存的目录,默认是./即redis的启动目录,也可以自己配置。

2.AOF策略(对RDB策略的弥补,默认是开启RDB,默认不开启AOF,使用RDB可能进行了写操作但是三个策略一个也没有触发) 采用操作日志来记录进行的每一次写操作(记录的是命令不是数据)。每次redis服务启动时,都会重新执行一遍操作日志中的指令。可行性高但是效率很低。 也是通过修改配置文件来设置该策略。 在这里插入图片描述

三、redis的事务 1.概念 不论是关系型数据库还是非关系型数据库,都有事务的概念。 事务:把一组数据库命令放在一起执行,保证操作的原子性,要么同时成功,要么同时失败。 redis事务:允许把一组redis命令放在一起执行,把命令进行序列化(把命令排个序依次执行),然后一起执行,执行过程中不能保证原子性,只能保证部分原子性(后面解释)。

2.redis事务的基本操作 (1)multi:用来标记一个事务的开始。 (2)exec:用来执行事务队列中所有的命令。 在这里插入图片描述 部分原子性的说明: (a)错误1 如果一组命令中,有在压入事务队列过程中发生错误的命令,则本事务中所有的命令都不执行,能够保证事务的原子性。 例如: 在这里插入图片描述 在这里插入图片描述 (b)错误2 如果一组命令在压入队列中正常,但在执行事务队列命令时发生了错误,则只会影响发生错误的命令,不会影响其它命令的执行,不能保证事务的原子性。 例如: 在这里插入图片描述 在这里插入图片描述 (3)discard:清除所有已经压入事务队列中的命令,事务也自动会结束。 例如: 在这里插入图片描述 在这里插入图片描述 (4)watch: 监控某一个键,当事务在执行过程中,此键代码的值发生变化时,则本事务放弃执行;否则,正常执行。例如:

watch version multi decrby balance 50 incrby balance2 50 incr version exec

监控version字符串,只有version值未变事务才能正常执行。 说明:version字段主要用于解决并发执行的情况。 (5)unwatch:放弃监控所有的键

watch version unwatch multi decrby balance 50 incrby balance2 50 exec

四、redis消息的发布与订阅(了解原理即可) redis客户端订阅频道(频道可以理解为对于某些数据的关注,比如对于某个数据的修改的情况为一个频道,所有想要关注该数据修改情况的客户端订阅该频道,当该数据被修改时将消息发送到订阅了该频道的客户),消息的发布者往频道上发布消息,所有订阅此频道的客户端都能够接受到该消息。 (1)subscribe:订阅一个或者多个频道的信息

subscribe ch1 ch2 ch3

(2)publish:将消息发布到指定频道

publish ch1 hello

(3)psubscribe:订阅一个或者多个频道,它的功能更强大,频道名支持通配符。

五、搭建redis集群 集群就是将多个服务器搭建成一个集体,多个服务器的数据相同,当有多个请求时,多个服务器可以分配处理请求(哪个服务器空闲着将请求分配给它处理),减轻只有一台服务器时服务器处理请求的压力。集群适用于处理“写少读多”的情况。 1.redis的主从复制 主机数据更新后根据配置和策略,自动同步到从机的master/slave机制,Master以写为主,Slave以读为主。 主从复制:主写从读,主多从少、读写分离、主写同步复制到从。 2.例如:搭建一主二从的redis集群 (1)搭建3台redis服务 按理需要在三台计算机中分别安装redis软件(服务器),但也可以在用1台redis模拟3台redis服务(假设分别为6379、6380、6381),方法是准备3份redis配置文件,分别将3份配置文件中的bind、pidfile、端口号、dbfilename(持久化文件)和logfile(日志文件)改为不同的值。分别使用3个redis配置文件启动3个redis服务,启动时指定对应的配置文件。 (2)通过3个redis客户端分别连接3台redis服务 (3)查看3台服务在集群中的主从角色

info replication

目前3个redis服务是3个互不关联的主机,都能写和读,都没有从机。 (4)设置主从关系 在6380和6381上执行:slaveof 127.0.0.1(主机ip地址) 6379(主机redis服务的端口),则6379是主机、6380和6381是从机。 (5)全量复制 一旦主从关系确定,会自动把主机中已有的数据会自动同步复制到从机上。 (6)增量复制 主机上修改数据,会自动同步复制到从机上。 (7)读写分离,主写从读 在从机上写数据会报错,从机只能读数据。 (8)主机宕机(主机宕机,默认从机原地待命,主机恢复后一切恢复正常) 关闭6379服务,可以发现6380和6381还是从机,但是连接状态(master-link-status)变成了down(也是通过info replication查看)。重启加粗样式6379服务,可以发现6379还是主机,有两个从机。 (9)从机宕机(从机恢复,需要重新设置主从关系) 关闭6380服务,发现6379还是主机,但是只有一个从机;6381还是从机,主机是6379(即6381不受影响)。重启6380服务,发现6380变成了独立的主机,6379与6381的状态与6380宕机时的状态一样。若要6380作为6379的从机则要重新设置主从关系。 (10)主机宕机,从机上位 关闭6379服务,找到一个性能较好的从机让其上位(变为主机)。 上位步骤: 断开原来主从关系,slaveof no one; 重新设置主从关系,让其它从机转换主机,执行slaveof命令重新设置。 这时再重启6379会发现它是一个没有从机的独立的主机。

六、redis的哨兵模式 哨兵是redis的一段代码,提供一套模式,自动实现“主机宕机、从机上位”。

七、Jedis 使用redis官方推荐的Jedis,在java应用中操作redis。Jedis几乎涵盖了redis的所有命令。操作redis的命令在Jedis中以方法的形式出现。 1.新建一个空项目,编码格式改为utf-8

在这里插入图片描述 2.新建一个module,选择maven的web项目 在这里插入图片描述 3.添加jedis依赖 在这里插入图片描述 4.新建一个java文件夹(directory),make directory as -->sources root 新建jedis包(package),再新建测试类Test。 5.打开redis服务。 6.编写代码,运行。 在这里插入图片描述 jedis.ping()相当于在redis客户端执行ping命令,返回值为“PONG"表示服务端正常运行。 jedis.auth()是在设置了redis连接密码时使用的,可以通过查看配置文件的requirepass值。 在这里插入图片描述 在这里插入图片描述 上述代码相当于”exists k1"命令。 在这里插入图片描述 代码:

public class Test { public static void main(String[] args) { //连接redis,使用Jedis对象,new时传递两个参数,一个为ip地址,一个为port(端口号) Jedis jedis = new Jedis("127.0.0.1",6379); jedis.auth("123456"); /*使用jedis对象来操作redis服务 String ret = jedis.ping(); System.out.println(ret);*/ /*获取服务端中所有的字符串,相当于”keys *“命令 Set keys = jedis.keys("*"); for(String key :keys){ System.out.println(key);}*/ /* 相当于"exists k1"命令 Boolean ret = jedis.exists("k1"); System.out.println(ret);*/ //相当于“set k3 3"命令 jedis.set("k3","3"); Set keys = jedis.keys("*"); for(String key :keys){ System.out.println(key);} } }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3